CloudFront 標準ログがアップデート!新機能のパーティションやJSON出力を試してみた

CloudFront 標準ログがアップデート!新機能のパーティションやJSON出力を試してみた

CloudFrontのアクセスログ機能が大幅にアップデートされ、CloudWatch Logs/Firehoseへの配信、S3出力時のパーティション指定やログ項目・フォーマットのカスタマイズが可能になりました。
Clock Icon2024.11.21

2024年11月20日、Amazon CloudFront は、標準のアクセスログ機能がアップデート。
CloudWatch Logs と、Firehose へのログ配信と、
S3のログ出力もパーティション指定や、ログ項目、フォーマットのカスタマイズが可能になりました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-cloudfront-log-formats-destinations-access/

今回 新しい CloudFrontの標準アクセスログの S3出力設定と、機能変更、アップデート内容について、確認を試みる機会がありましたので、紹介させていただきます。

CloudFront設定画面

CloudFrontダッシュボードを利用しました

Loggingタブ

ディストリビューション設定画面に「Logging」のタブが増えました。

CloudFrontLogging

  • 従来の標準ログ設定は「S3 Legacy」で表示されます。

設定追加

「Add」ボタンを操作

ログ追加

ログ出力先として以下の選択が可能になりました。

  • CloudWatch Logs
  • Kinesis Data Firehose
  • Amazon S3

今回、ログ出力先として Amazon S3 を選択し、ログ保存用のバケットを新規に作成しました。

Addログ設定1

追加設定

「Addtional Setting」で、ログ項目、パーティション、フォーマット指定が可能になりました。

追加標準ログ設定1

今回、以下の追加設定を行いました。

  • ログ項目は、設定可能な39項目をすべて選択。
  • パーティションは変数の動作確認のため、サンプルをそのまま踏襲「/folder1/{DistributionId}/folder2/{yyyy}/{MM}/{dd}/{HH}/folder3」
  • Hive互換パス指定は省略
  • フォーマットは「JSON」を選択

Add標準ログ設定2

S3バケットポリシー

CloudFront のログ出力先として新規作成した S3 バケットのバケットポリシーを確認しました。

パケットポリシー対応

これまでの標準ログ記録(S3 Legacy)ではACL有効化が必須でしたが、今回のアップデートでバケットポリシーがサポートされ、ACL関係の設定が不要となりました。

https://dev.classmethod.jp/articles/cloudfront-access-log-dont-choose-no-acl-s3-bucket/

ログ確認

パーティション指定により、ログはディストリビューションID、年、月、日、時間で階層化された状態で保存されている事を確認できました。

s3://<S3バケット名>/folder1/<ディストリビューションID>/folder2/2024/11/21/06/folder3/<ディストリビューション>.2024-11-21-06.*****.gz

S3 Select

S3に保存されたログファイル、S3 Selectを利用してクエリを実行し、ログ内容の確認を試みました。

S3Select1

改行区切りのJSON(JSONL)で、ログが記録されていることを確認できました。

S3Select2

まとめ

従来の CloudFront の標準アクセスログは、S3 バケットの指定したプレフィックス以下にフラットに保存されていました。そのため、大規模サイトで長期間ログを保存すると、膨大な数のログファイルから必要な情報を検索することが困難でした。

従来は、ログファイルを整理するために、Lambda 関数を使用してログファイルのキーを変更するなどのワークアラウンドが必要でしたが、今回のアップデートにより、パーティション機能がネイティブでサポートされたため、このようなワークアラウンドは不要になりました。

https://dev.classmethod.jp/articles/cloudfrontlog-daily-rename/

ログフォーマットとして従来のCSV(TSV)以外、JSON、Perquetがサポートされた事により、Athenaを利用したログ解析も大幅に簡略化した利用が可能になります。

https://dev.classmethod.jp/articles/cloudfront-log-symlink-athena/

https://dev.classmethod.jp/articles/elb-cf-accesslog-via-firehose/

ログ出力先として新しくサポートされた CloudWatchLogsを利用すれば、LogsInsightによる解析や、ログ監視の実現。Firehoseを利用する事で、ログの集約やより精度の高い分類などが実現出来る可能性があります。

CloudWatchLog、Firehose それぞれのログ投入量に応じた従量課金に注意してご利用下さい。

新しい S3 ログ記録では、バケットポリシーがサポートされ、従来必要だった ACL 設定が不要になりました。これにより、ACL 設定ミスによるリスクを回避することができます。また、Security Hub などのセキュリティツールで、CloudFront のログ記録用に使用されている S3 バケットが検出されるのを抑制することができます。

CloudFrontの標準アクセスログ、新旧のS3設定を併用して利用する事が可能です。メリットの大きい新しいログ設定、ぜひご活用ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.